import cv2
def detectAndDescribe(image):
	gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
	sift=cv2.SIFT_create()
	kp,des=sift.detectAndCompute(gray,None)
	return image,kp,des
imgA=cv2.imread("left_01.jpg")
imgB=cv2.imread("right_01.jpg")
imgA,kpA,desA=detectAndDescribe(imgA)
imgB,kpB,desB=detectAndDescribe(imgB)
index_params = dict(algorithm=1, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
rawMatches = flann.knnMatch(desA, desB, k=2)
ratio = 0.7
#matches = [[m] for m,n in rawMatches if m.distance < ratio * n.distance]
matches = []
for m, n in rawMatches:
    if m.distance < ratio * n.distance:
        matches.append([m])
out=cv2.drawMatchesKnn(imgA,kpA,imgB,kpB,matches[:50],None)
cv2.imshow('drawMatches',out)
cv2.waitKey()
cv2.destroyAllWindows()